A computer system typically involves multiple components working in cooperation to perform a task. For example, a computer system may include one or more co-operating instruction processors. These instruction processors may be supported by communication busses, cache memories, shared and dedicated memories, input/output (I/O) devices, interface hardware, and the like.
The process of designing and ensuring proper functionality of these constituent components, i.e., development process, is involved and time consuming. In addition, the demand for computer systems of increasing complexity, such as computer systems that can provide more throughput, further increase the time and resources required to design and ensure the proper functionality of components.
In order to expedite the design process, emulation tools are often used to assist in testing the functionality of a component or system being designed. During this process, one or more emulation modules are often developed to interface with and test the functionality of the components being designed. For example, a designer currently developing a memory architecture may use an emulation module to mimic the functionality of an associated instruction processor. The emulated instruction processor may be used, for example, to interact with the memory architecture being developed in a manner that conforms to that of an actual instruction processor in order to test the operation of the memory architecture. As the processor itself may also not yet be implemented, the use of an emulated instruction processor allows the development of the actual instruction processor and the memory architecture to proceed concurrently. In this manner, the development period needed to complete the overall computer system may be compressed.
A designer may develop an emulation module for a particular component by utilizing an editor or other software application to describe the functionality of the component in accordance with a hardware description language (HDL). Examples of widely-used HDLs include the Very high-speed integrated circuits Hardware Description Language (VHDL) and Verilog™, which is described in the IEEE Verilog 1364-2000 standard. These languages support syntaxes that appear similar to software programming languages, such as C++ and Java, and allow the designer to define and simulate components using high-level code by describing the structure and behavior of components.
While the use of emulation can greatly aid in the development of the computer system, even the design of operationally-correct emulation modules requires time and resources. In other words, development of an emulated instruction processor that correctly mimics the functionality of an actual instruction processor is a complex and time-consuming process. For example, one feature of an instruction processor that may require significant resources to accurately emulate is the incorporation of a write buffer.
A write buffer is a type of first in, first out (FIFO) queue that typically resides within the instruction processor and provides storage space for pending write requests. The instruction processor typically issues the write requests queued in the write buffer as “pre-fetch” write requests to a cache via a dedicated write buffer interface, and subsequently issues the corresponding “real” write request to the cache via a memory interface. The pre-fetch write requests are typically used to reserve ownership of cache lines within the cache prior to the issuance of the actual write requests. In this manner, the execution of the subsequent write request may be accelerated as the instruction processor has already reserved ownership of the cache lines. Time-saving techniques directed to the efficient and accurate development and configuration of an emulated instruction processor having write buffers may further reduce the overall time necessary to develop a computer system.